package com.ys.io.p6内存流;

import java.io.*;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;

/**
 * 描述:
 *
 * @author CodeYang
 * @version 2020/12/30 15:54
 */
public class 下载文件集合测试 {

    private static final  String URL_PATH= "http://n.sinaimg.cn/sports/2_img/upload/cf0d0fdd/559/w1080h1079/20201229/7825-kfxsuvw7584257.jpg";

    public static void main(String[] args) throws MalformedURLException, URISyntaxException {

            URL url =new URL(URL_PATH);
            URI uri = new URI(URL_PATH);
        try (InputStream inputStream = url.openStream(); ByteArrayOutputStream bos = new ByteArrayOutputStream();) {
                // 1使用内存读取流 将 打开后的流读到内存中
            byte[] data = new byte[1024];
            int len;
            while ((len =inputStream.read(data))!=-1){
                // 2: 写入内存流
                bos.write(data,0,len);
            }
            bos.flush();
            // 创建文件字节输出流 将读取到的数据 写入磁盘
            // 1: 创建
            //FileOutputStream fos = new FileOutputStream("1.png");
            /*
            *  需求: 要求下载文件不重名,文件后缀跟随文件类型自动改变
            * */
            //1 切割字符获得文件后缀
            int index = URL_PATH.lastIndexOf(".");
            String suffix = URL_PATH.substring(index);
            //2 根据系统时间生成前缀,毫秒数保证不重复
            String prefix = String.valueOf(System.currentTimeMillis());

            // 3 : 全路径:
            String fullPath = prefix+suffix;

            FileOutputStream fos = new FileOutputStream(fullPath);
            // 2 内存中的流数据转为 byte数组
            byte[] bytes = bos.toByteArray();
            fos.write(bytes);
            fos.flush();

        }catch (Exception e){
            System.out.println("下载失败!");
            e.printStackTrace();
        }


    }
    /**
    * 描述 :
    *
    * @param : url 网络地址全路径
    * @return: boolean
    * @date: 2020/12/30 16:17
    */
    private  static  boolean downloadSources(String url){
        // 1 文件路径不能为空
        if (null == url||"".equals(url)){
            return  false;
        }
        // 2: 打开文件流

        return false;
    }


}
